 /* 
 获取元素的样式
  + @param {Object} ele 表示元素
  + @param {String} attr 表示要获取的样式的属性名
 */
function getStyle(ele,attr){
    if(window.getComputedStyle){
        return getComputedStyle(ele,null)[attr]
    }else {
        return ele.currentStyle[attr]
    }
}
 /* 
匀速运动封装 
+ @param {Object} ele 表示运动的元素
+ @param {Number} target 表示运动的终点值
+ @param {Number} num 表示运动的步长
+ @param {String} attr 表示运动的元素要改变的样式属性名
*/
function donghua(ele,target,num,attr){
    clearInterval(ele.timer)
   ele.timer=setInterval(()=>{
    var step=num
    var begin=parseInt(getStyle(ele,attr))
    var res=step+begin
    if(res>=target&&num>0){
        res=target
        clearInterval(ele.timer)
    }else if(res<=target&&num<0){
        res=target
        clearInterval(ele.timer)
    }
    ele.style[attr]=res+'px'
   },30)
}
 /* 
 缓冲运动封装 
 + @param {Object} ele 表示运动的元素
 + @param {Number} target 表示运动的终点值
 + @param {String} attr 表示运动的元素要改变的样式属性名
 + @param {Function} callback 表示回调函数 当当前函数执行完以后 再执行回调
 */
 function huanchong(ele, target, attr, callback) {
    // 先清除定时器 
    clearInterval(ele.timer)
    // 开启定时器  
    ele.timer = setInterval(() => {
        // // 设置一个终点位置  
        // var target = target
        // 获取初始位置  
        var begin = parseFloat(getStyle(ele, attr))
        var step = (target - begin) / 13
        step = step > 0 ? Math.ceil(step) : Math.floor(step)
        // 获取移动的位置
        var res = begin + step
        ele.style[attr] = res + 'px'

        if (res === target) {
            clearInterval(ele.timer)
            callback && callback()
        }
    }, 30)
}